#include <bits/stdc++.h>

using namespace std;

const long long N = 1e5 + 10;

long long v;
long long x[N], y[N];
long long idx[N];
long long xl[N], xr[N];
map<long long, long long> mpl, mpr;

long long cmp(long long a, long long b) {
  return y[a] < y[b] || (y[a] == y[b] && x[a] < x[b]);
}

int main() {
  while (scanf("%lld", &v) > 0) {
    for (long long i = 0; i < v; ++i) {
      scanf("%lld%lld", x + i, y + i);
    }
    for (long long i = 0; i < v; ++i) {
      idx[i] = i;
    }
//    memset(xr, 0, sizeof(xr));
    mpr.clear();
    mpl.clear();
    sort(idx, idx + v, cmp);
    long long mnx = 1e9, mxx = 0;
    for (long long i = 0; i < v; ++i) {
      mnx = min(mnx, x[i]);
      mxx = max(mxx, x[i]);
    }
    long long lx = 0, rx = v - 1;
    long long ln = 0, rn = v - 1;
    for (long long i = 0; i < v; ++i) {
      if (x[idx[i]] == mxx) {
        lx = i;
        break;
      }
    }
    for (long long i = v - 1; i >= 0; --i) {
      if (x[idx[i]] == mxx) {
        rx = i;
        break;
      }
    }
    for (long long i = 0; i < v; ++i) {
      if (x[idx[i]] == mnx) {
        ln = i;
        break;
      }
    }
    for (long long i = v - 1; i >= 0; --i) {
      if (x[idx[i]] == mnx) {
        rn = i;
        break;
      }
    }
    long long mnt = 1e9;
    for (long long i = 0; i < v; ++i) {
      if (i <= rn) {
        xl[i] = min(mnt, x[idx[i]] - 1);
        if (mpl.find(y[idx[i]]) == mpl.end()) {
          mpl[y[idx[i]]] = xl[i];
        }
        else {
          mpl[y[idx[i]]] = min(mpl[y[idx[i]]], xl[i]);
        }
        mnt = xl[i];
      }
      else {
        break;
      }
    }
    mnt = 1e9;
    for (long long i = v - 1; i >= 0; --i) {
      if (i > rn) {
        xl[i] = min(mnt, x[idx[i]] - 1);
        if (mpl.find(y[idx[i]]) == mpl.end()) {
          mpl[y[idx[i]]] = xl[i];
        }
        else {
          mpl[y[idx[i]]] = min(mpl[y[idx[i]]], xl[i]);
        }
        mnt = xl[i];
      }
      else {
        break;
      }
    }
    long long mxt = 0;
    for (long long i = 0; i < v; ++i) {
      if (i <= rx) {
        xr[i] = max(mxt, x[idx[i]] + 1);
        mpr[y[idx[i]]] = max(mpr[y[idx[i]]], xr[i]);
        mxt = xr[i];
      }
      else {
        break;
      }
    }
    mxt = 0;
    for (long long i = v - 1; i >= 0; --i) {
      if (i > rx) {
        xr[i] = max(mxt, x[idx[i]] + 1);
        mpr[y[idx[i]]] = max(mpr[y[idx[i]]], xr[i]);
        mxt = xr[i];
      }
      else {
        break;
      }
    }
    map<long long, long long>::iterator it;
    vector<pair<long long, long long> > vl, vr;
    for (it = mpl.begin(); it != mpl.end(); ++it) {
      vl.push_back(make_pair(it->first, it->second));
    }
    for (it = mpr.begin(); it != mpr.end(); ++it) {
      vr.push_back(make_pair(it->first, it->second));
    }
    long long l = 0, r = vl.size() - 1;
    long long area = 0;
    for (long long i = 0; i < vl.size(); ++i) {
      if (vl[i].second > mnx - 1 && i < vl.size() - 1) {
        area -= (long long)(vl[i + 1].first - vl[i].first) * vl[i].second;
      }
      else {
        l = i;
        break;
      }
    }
    //printf("%lld\n", area);
    for (long long i = vl.size() - 1; i >= 0; --i) {
      if (vl[i].second > mnx - 1 && i > 0) {
        area -= (long long)(vl[i].first - vl[i - 1].first) * vl[i].second;
      }
      else {
        r = i;
        break;
      }
    }
    //printf("%lld\n", area);
    area -= (long long)(vl[r].first - vl[l].first + 2) * (mnx - 1);
    l = 0, r = vr.size() - 1;
    for (long long i = 0; i < vr.size(); ++i) {
      if (vr[i].second < mxx + 1 && i < vr.size() - 1) {
        area += (long long)(vr[i + 1].first - vr[i].first) * vr[i].second;
      }
      else {
        l = i;
        break;
      }
    }
    //printf("%lld\n", area);
    for (long long i = vr.size() - 1; i >= 0; --i) {
      if (vr[i].second < mxx + 1 && i > 0) {
        area += (long long)(vr[i].first - vr[i - 1].first) * vr[i].second;
      }
      else {
        r = i;
        break;
      }
    }
    //printf("%lld\n", area);
    area += (long long)(vr[r].first - vr[l].first + 2) * (mxx + 1);
    for (long long i = 0; i < vr.size() - 1; ++i) {
      if (vr[i].second == vl[i + 1].second) {
        area += vr[i + 1].first - vr[i].first - 1;
      }
      else if (vr[i].second < vl[i + 1].second) {
        area += (vl[i + 1].first - vr[i].first - 2) * (vl[i + 1].second - vr[i].second);
        area += (vl[i + 1].first - vr[i].first - 1) + (vl[i + 1].second - vr[i].second);
      }
    }
    for (long long i = 0; i < vl.size() - 1; ++i) {
      if (vl[i].second == vr[i + 1].second) {
        area += vl[i + 1].first - vl[i].first - 1;
      }
      else if (vl[i].second > vr[i + 1].second) {
        area += (vr[i + 1].first - vl[i].first - 2) * (vl[i].second - vr[i + 1].second);
        area += (vr[i + 1].first - vl[i].first - 1) + (vl[i].second - vr[i + 1].second);
      }
    }
    long long cc = (y[idx[v - 1]] - y[idx[0]] + 2) * 2 + (mxx - mnx + 2) * 2;
    printf("%lld %lld\n", cc, area);
  }
  return 0;
}
